package notes.java.thread;

// 测试volatile不具有原子性
// 启10个线程每个线程执行1000次对num加1操作，每次执行结果不一样
// 对方法加synchronized处理就可以了。
public class VolatileSynch {
	
	private static volatile int num = 0;
	
	private /*synchronized*/ static void increase() {
		num++;
	}
	
	public static void main(String[] args) throws InterruptedException {
		
		// 创建10个线程
		Thread[] threads = new Thread[10];
		for(int i=0; i<threads.length; i++) {
			threads[i] = new Thread(new Runnable() {
				@Override
				public void run() {
					// 循环1000次做加加操作
					for(int i=0; i<1000; i++) {
						// 加加操作
						increase();
					}
				}
			});
			threads[i].start();
		}
		
		for(Thread th: threads) {
			th.join(); // 等待每个线程运行完
		}
		
		System.out.println("全部运行完：num=" + num);
	}

}
